﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using App.Persistencia;
using App.SolInf.Modelo;
using NHibernate;
using NHibernate.Criterion;

namespace App.SolInf.Vista.Controls
{
    public partial class FiltroBusquedaProducto : UserControl, IFiltroBusqueda
    {
        public IList<Marca> Marcas
        {
            get { return (IList<Marca>)cmbMarcas.DataSource; }
            set { cmbMarcas.DataSource = _addBlank(value.ToArray()); }
        }

        public IList<CategoriaProducto> Categorias
        {
            get { return (IList<CategoriaProducto>)cmbMarcas.DataSource; }
            set { cmbCategorias.DataSource = _addBlank(value.ToArray()); }
        }

        private object[] _addBlank(object[] obj)
        {
            if( obj != null )
            {
                var t = obj.ToList();
                t.Insert(0,"");
                obj = t.ToArray();
            }
            return obj;
        }

        public FiltroBusquedaProducto()
        {
            InitializeComponent();
            
        }

        public ICriteria AplicarFiltro(ICriteria query)
        {
        

            var id = txtId.Text.Trim();
            if (!String.IsNullOrEmpty(id))
                query.Add(new LikeExpression("Id", id, MatchMode.Start));

            var nombre = txtNombre.Text.Trim();
            if (!String.IsNullOrEmpty(nombre))
                query.Add(new LikeExpression("Descripcion", nombre, MatchMode.Anywhere));

            if (cmbMarcas.SelectedItem is Marca)
                query.Add(new SimpleExpression("Marca.Id", ((Marca)cmbMarcas.SelectedItem).Id, "="));


            if (cmbCategorias.SelectedItem is CategoriaProducto)
                query.Add(new SimpleExpression("Categoria.Id", ((CategoriaProducto)cmbCategorias.SelectedItem).Id, "="));

            if( checkBox1.Checked )
                query.Add(new SimpleExpression("Stock", Double.Epsilon, ">"));

            return query;
        }

        private void FiltroBusquedaProducto_Enter(object sender, EventArgs e)
        {
            txtId.Focus();
        }

    }
}
